package com.baoyouqun.domain.Enum;

import com.alibaba.fastjson2.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 泛型枚举基类抽象实现，提供通用方法的默认实现
 *
 * @param <E> 枚举类型本身
 * @param <C> 编码类型（String/Long等）
 */
public abstract class AbstractEnumBase<E extends Enum<E> & EnumBase<E, C>, C> implements EnumBase<E, C> {

    private final Class<E> enumClass;

    public AbstractEnumBase(Class<E> enumClass) {
        this.enumClass = enumClass;
    }

    /**
     * 根据编码获取枚举实例（泛型实现）
     */
    @Override
    public E getEnum(C code) {
        if (code == null) {
            return null;
        }

        for (E enumConstant : enumClass.getEnumConstants()) {
            if (code.equals(enumConstant.getCode())) {
                return enumConstant;
            }
        }
        return null;
    }

    /**
     * 获取所有枚举项的JSON列表（泛型实现）
     */
    @Override
    public List<JSONObject> getAll() {
        List<JSONObject> result = new ArrayList<>();
        Arrays.stream(enumClass.getEnumConstants()).forEach(enumConstant -> {
            JSONObject json = new JSONObject();
            json.put("name", enumConstant.getName());
            json.put("code", enumConstant.getCode());
            result.add(json);
        });
        return result;
    }
}
    